package config_mod

import (
	"clientDemo/service/common"
	log2 "clientDemo/service/log"
	"clientDemo/service/modulemgr"
	"crypto/md5"
	"encoding/hex"
	"log"
	"os"
)

type ConfigModule struct {
	logger *log.Logger
	UIData string

	data         common.AppData //系统数据
	IsFirstStart bool
}

func NewConfigModule() *ConfigModule {
	tmp := &ConfigModule{}
	return tmp
}
func (m *ConfigModule) Init(mm modulemgr.IModuleManager) (bool, error) {
	m.logger = log2.Logger
	m.LoadConfig()
	if !m.ReadAppData() {
		m.IsFirstStart = true
	}
	return true, nil

}
func (m *ConfigModule) Run(mm modulemgr.IModuleManager) (bool, error) {
	return false, nil
}

// CheckLoginStatus 检查登录状态
func (m *ConfigModule) CheckLoginStatus() bool {
	if m.IsFirstStart {
		return false
	}
	return m.data.IsLogin
}

func (m *ConfigModule) LoginService(username string, password string) bool {
	conf := common.Get()
	if username != conf.LoginConfig.Username {
		return false
	}
	hasher := md5.New()
	// Write数据到哈希对象
	hasher.Write([]byte(password))
	// 计算哈希值
	hashBytes := hasher.Sum(nil)
	// 将哈希值转换为十六进制字符串
	hashString := hex.EncodeToString(hashBytes)
	if hashString != conf.LoginConfig.Password {
		return false
	}
	return true
}
func (m *ConfigModule) CheckConfig() (dirExist bool, fileExist bool) {
	dirExist = m.checkConfigDir()
	if dirExist {
		fileExist = m.checkConfigFile()
		if !fileExist {
			m.createConfigFile()
		}
		return dirExist, fileExist
	} else {
		if m.createConfigDir() {
			m.createConfigFile()
		}
		return dirExist, false
	}
}

func (m *ConfigModule) checkConfigFile() bool {
	_, err := os.Stat("config/config.txt")
	if err == nil { // 文件存在
		return true
	} else {
		if os.IsExist(err) {
			return true
		} else {
			return false
		}
	}
}

func (m *ConfigModule) createConfigFile() {
	file, err := os.Create("config/config.txt")
	if nil != err {
		m.logger.Println("ERROR:创建config文件夹失败")
	}
	file.Close()
}

func (m *ConfigModule) createConfigDir() bool {
	err := os.Mkdir("config", os.ModePerm)
	if nil != err {
		m.logger.Println("ERROR:创建config文件夹失败")
		return false
	}
	return true
}

func (m *ConfigModule) checkConfigDir() bool {
	_, err := os.Stat("config")
	if err == nil { // 文件夹存在
		return true
	} else {
		if os.IsExist(err) {
			return true
		} else {
			return false
		}
	}
}
